<!-- 
    通达信链接：
    http://www.treeid/dlglocalurl##homepath##company/开盘啦龙虎榜.html?stock_code=xxxxxx&stock_name=##STOCKNAME##
    或
    http://www.treeid/dlglocalurl##homepath##company/开盘啦龙虎榜.html?stock_code=xxxxxx&stock_name=##STOCKNAME##&tdxmyiewidth=965&tdxmyieheight=1100&tdxmyielastpos=1&canchangesize=1

    开盘啦龙虎榜
    使用说明：
    1. 此页面用于查询指定股票的涨停原因信息
    2. 通过在URL参数中传递stock_code来指定要查询的股票代码
    3. html须放置在通达信根目录下的company、jmpages等目录下，不能放置在通达信根目录
    4. 页面包含自动刷新功能，当通达信软件股票代码变更时会自动更新数据
-->
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>开盘啦龙虎榜</title>
    <style>
        /* 页面基础样式 */
        html,
        body {
            font-family: system-ui, -apple-system, sans-serif;
            font-size: 14px;
            background-color: #0e0e0f;
            color: #D3E1F4;
            overflow-y: auto; /* 恢复默认滚动行为 */
            margin: 0;
            padding: 0;
            height: 100%;
        }
        /* 标题样式 */
        #title {
            margin: 5px 0px 0px 3px;
            border: 0px solid #FFFF88;
            padding: 3px;
            display: inline-block;
            color: #F9F9F9;
            background-color: #151516;
        }
        /* 标签通用样式 */
        #tag {
            font-size: 14px;
            border-radius: 5px;
            background-color: #151516;
            padding: 2px 6px;
            display: inline-block;
            color: #F9F9F9;
        }
        /* "关联"、"自定义标签"标签样式类 */
        .assoc-tag {
            font-size: 10px;
            border-radius: 5px;
            background-color: #720505;
            padding: 2px 6px;
            display: inline-block;
            color: #d3cf07;
            text-align: center;
        }
        /* 游资评级标签样式类 */
        .yzpj-tag {
            font-size: 10px;
            border-radius: 5px;
            color: #a0a0a0;
            background-color: #2c2c2c;
            padding: 2px 6px;
            display: inline-block;
        }
        /* "游资席位"标签样式类 */
        #yzmc-tag a{
            font-size: 14px;
            border-radius: 5px;
            background-color: #262f3b;
            padding: 2px 6px;
            display: inline-block;
            color: #26a3f0 !important;
        }
        /* "自定义组合"标签样式类 */
        .custom-tag {
            font-size: 10px;
            border-radius: 5px;
            background-color: #720505;
            padding: 2px 6px;
            display: inline-block;
            color: #d3cf07;
            text-align: center;
        }
        /* "昨买"标签样式类 */
        .zbuy-tag {
            font-size: 10px;
            border-radius: 5px;
            background-color: #5f04b9;
            padding: 2px 6px;
            display: inline-block;
            color: #dfdfdf;
        }
        /* "昨卖"标签样式类 */
        .zsell-tag {
            font-size: 10px;
            border-radius: 5px;
            background-color: #067406;
            padding: 2px 6px;
            display: inline-block;
            color: #dfdfdf;
        }
        /* 容器样式 */
        /* 容器样式 */
        .container {
            width: 950px;
            margin: 0 auto;
            min-height: 100%;
            position: relative;
            z-index: 1;
        }
        /* 行布局样式 */
        .row {
            flex: 1;
            display: grid;
            justify-content: center;
            grid-template-columns: 1.2fr 6fr;
        }

        /* 左侧面板样式 */
        .left-plante {
            position: relative;
            padding: 10px 5px;
            border: 1px solid #343a40;
            overflow-y: auto;
            z-index: 1000;
            display: flex;
            flex-direction: column;
        }
        /* 时间轴样式 */
        #dateList {
            list-style-type: none;
            height: 100%;
            padding: 0;
            margin: 0;
            flex-grow: 1;
            display: flex;
            flex-direction: column;
        }
        /* 日期标题样式 */
        .date-title {
            text-align: center;
            padding-bottom: 10px;
            color: #ee9937;
            font-weight: bold;
            position: relative;
            flex-shrink: 0; /* 防止标题被压缩 */
        }
        /* 日期标题装饰线样式 */
        .date-title::after {
            content: '';
            position: absolute;
            bottom: 5px;
            left: 50%;
            transform: translateX(-50%);
            width: 30px;
            height: 2px;
            background: linear-gradient(to right, transparent, #ee9937, transparent);
        }
        /* 日期标签样式 */
        .date-label {
            color: #999999; /* 设置默认灰色 */
            font-size: 12px;
            padding: 5px 12px;
            text-align: center;
            cursor: pointer;
            transition: color 0.3s ease;
            position: relative;
            border-radius: 6px;
            margin: 2px 0;
            min-height: 24px;
            display: flex;
            align-items: center;
            justify-content: center;
            box-sizing: border-box;
            background-color: transparent;
            /* 添加透明边框以保持尺寸一致 */
            border: 2px solid transparent;
            /* 添加默认的上下横线 */
            border-top: 1px solid transparent;
            border-bottom: 1px solid transparent;
            /* 添加默认的上下横线 */
            border-top: 1px solid transparent;
            border-bottom: 1px solid transparent;
        }
        /* 日期标签悬停效果 */
        .date-label:hover {
            color: #f0f0f0; /* 设置默认灰色 */
            background-color: rgba(128, 128, 128, 0.1);
        }
        /* 激活状态的日期标签样式 */
        .date-label.active {
            color: #4a8cff;
            font-weight: bold;
            /*background-color: rgba(74, 140, 255, 0.1);*/
            transform: none;
            transition: color 0.3s ease;
            padding: 5px 12px;
            /* 添加上下横线效果，使用渐变色彩 */
            border-top: 1px solid;
            border-bottom: 1px solid;
            border-image: linear-gradient(90deg, #080c14, #3d6cbe, #080c14) 1;
            border-left: 0 solid transparent;
            border-right: 0 solid transparent;
            /* 添加渐变背景 */
            background: linear-gradient(90deg, transparent, rgba(42, 76, 140, 0.1), transparent);
            /* 移除圆角 */
            border-radius: 0;
        }
        /* 右侧面板样式 */
        .right-plante {
            border: 1px solid #343a40;
            padding: 0 10px;
            /* 移除 scrollbar-gutter 属性 */
        }
        /* 右侧头部样式 */
        .right-header {            
            border-radius: 3px;
            padding: 10px 0;
            border-bottom: 1px solid #343a40;
            background: #23272c; /* 设置背景颜色 */
        }
        /* 日期时间样式 */
        .date-time {
            color: #4a8cff;
            margin: 0;
        }
        /* 股票名称标签样式 */
        .stock-name {
            color: #ee9937;
            font-size: 17px;
            font-weight: 700;
        }
        /* 行盒子样式 */
        .row-box {
            width: 95%;
            padding: 10px;
            margin: 10px 5px;
            background-color: #1C1D21;
            border-top: 1px solid #343a40;
            border-bottom: 1px solid #343a40;
            border-radius: 0px;
            white-space: nowrap;
        }
        /* 最后一个行盒子样式 */
        .row-box:last-child {
            border-bottom: 0px solid #343a40;
        }
        /* 通用span样式 */
        span {
            margin-left: 10px;
        }
        /* 上榜原因样式 */
        .list1-reasons,
        .list2-reasons {
            margin-left: 5px;
            display: block;
            color: #e6c200;
            padding: 5px 0;
        }
        /* 段落和链接样式 */
        p,a {
            padding: 5px 0;
            margin: 0;
            color: #D3E1F4 !important;
        }
        /* 链接常态样式 */
        a:link,
        a:visited {
            color: #e1e6ea;
            text-decoration: none;
        }
        /* 链接悬停样式 */
        a:hover {
            color: #338fff;
        }
        /* 链接激活样式 */
        a:active {
            font-style: italic;
        }
        /* 右侧龙虎榜表格样式 */
        .dept-table {
            width: 100%;
            border-collapse: collapse;
            margin: 10px 0;
        }
        /* 右侧龙虎榜表格标题样式 */
        .dept-table th {            
            padding: 8px 5px;
            border-bottom: 1px solid #343a40;
            background: #23272c;
            color: #6e757f;
            font-weight: normal;
        }
        /* 右侧龙虎榜表格列样式 */
        .dept-table td {
            padding: 8px 5px;
            border-bottom: 1px solid #343a40;
        }
        /* 右侧龙虎榜表格，买入/卖出席位行悬停效果 */
        .dept-table tr:hover {
            background-color: rgba(66, 66, 66, 0.1);
        }
        /* 营业部名称 */
        .dept-name {
            width: 67%;
            text-align: left;
        }
        /* 营业部名称链接样式 */
        .dept-name a {
            color: #D3E1F4 ;
        }
        /* 营业部名称链接：鼠标悬停样式 */
        .dept-name a:hover {
            color: #338fff !important;
        }
        /* 表格列：买入金额 */
        .dept-buy {
            font-size: 12px;
            width: 11%;
            text-align: right; /* 修改为右侧对齐 */
            color: #ff4747;
        }
        /* 表格列：卖出金额 */
        .dept-sell {
            font-size: 12px;
            width: 11%;
            text-align: right; /* 修改为右侧对齐 */
            color: #71c016;
        }
        /* 表格列：净额 */
        .dept-net {
            font-size: 12px;
            width: 11%;
            text-align: right; /* 修改为右侧对齐 */
        }
        /* 滚动条样式 */
        /* 隐藏特定元素的滚动条 */
        body::-webkit-scrollbar,
        .right-plante::-webkit-scrollbar,
        .container::-webkit-scrollbar {
            width: 0px;
            height: 0px;
        }
        /* 左侧面板滚动条样式 */
        .left-plante::-webkit-scrollbar {
            width: 6px;
            height: 6px;
        }
        /* "自定义组合管理"、"新增组合"弹窗滚动条样式 */
        .popup-iframe-container::-webkit-scrollbar {
            width: 8px;
            height: 8px;
        }
        /* "自定义组合管理"、"新增组合"弹窗滚动条轨道样式 */
        .popup-iframe-container::-webkit-scrollbar-track {
            background: #1a1a1a; /* 滚动条的背景颜色 */
            border-radius: 4px;
        }
        /* "自定义组合管理"、"新增组合"弹窗滚动条滑块样式 */
        .popup-iframe-container::-webkit-scrollbar-thumb {
            background: #3a3a3a; /* 滚动条的滑块颜色 */
            border-radius: 4px;
        }
        /* "自定义组合管理"、"新增组合"弹窗滚动条滑块悬停样式 */
        .popup-iframe-container::-webkit-scrollbar-thumb:hover {
            background: #4a4a4a; /* 滚动条的滑块悬停颜色 */
        }
        /* "自定义组合管理"、"新增组合"弹窗遮罩层样式 */
        .popup-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.85); /* 弹窗的背景颜色 */
            z-index: 10000;
        }
        /* "自定义组合管理"、"新增组合"弹窗内容样式 */
        .popup-content {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 90%;
            height: 85%;
            background-color: #0d0e0f;
            border: 1px solid #2a2d35;
            border-radius: 3px;
            overflow: hidden;
        }
        /* "自定义组合管理"、"新增组合"弹窗头部样式 */
        .popup-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 24px;
            padding: 0px 15px;
            background-color: #660000;
            border-bottom: 1px solid #343a40;
        }
        /* "自定义组合管理"、"新增组合"弹窗标题样式 */
        .popup-title {
            color: #ee9937;
            font-weight: bold;
            font-size: 14px;
        }
        /* "自定义组合管理"、"新增组合"弹窗关闭按钮样式 */
        .popup-close {
            color: #fff;
            font-size: 24px;
            font-weight: 300;
            cursor: pointer;
            border-radius: 2px;
            text-align: center;
            z-index: 10002;
        }
        /* "自定义组合管理"、"新增组合"弹窗iframe容器样式 */
        .popup-iframe-container {
            height: calc(100% - 50px);
            position: relative;
        }
        /* "自定义组合管理"、"新增组合"弹窗iframe样式 */
        .popup-iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
        /* 激活状态动画 */
        @keyframes activePulse {
            0% {
                box-shadow: 0 0 0 0 rgba(74, 140, 255, 0.4);
            }
            70% {
                box-shadow: 0 0 0 6px rgba(74, 140, 255, 0);
            }
            100% {
                box-shadow: 0 0 0 0 rgba(74, 140, 255, 0);
            }
        }
        /* 带脉冲效果的激活日期标签已移除 */
        /* "通达信龙虎榜"按钮样式 */
        .tdx-switch {
            display: inline-block;
            margin-left: 15px;
            padding: 4px 10px;
            background-color: #2d3748;
            border-radius: 3px;
            font-size: 12px;
            cursor: pointer;
            transition: all 0.3s ease;
            text-decoration: none;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
        }
        /* "通达信龙虎榜"按钮悬停样式 */
        .tdx-switch:hover {
            color: #338fff !important;
        }
        /* "关联"列宽度 */
        .dept-table th:first-child,
        .dept-table td:first-child {
            width: 50px; /* 设置固定宽度为100px */
            min-width: 50px; /* 防止宽度被压缩 */
            white-space: nowrap; /* 防止文字换行 */
            overflow: hidden; /* 隐藏溢出内容 */
            text-overflow: ellipsis; /* 显示省略号 */
            text-align: center; /* 水平居中 */
            vertical-align: middle; /* 垂直居中 */
        }
        /* 添加拖拽相关的CSS样式 */
        /* 拖拽中元素样式 */
        .dragging {
            opacity: 0.5;
            background-color: #2d3748;
        }
        /* 拖拽悬停元素样式 */
        .dragover {
            border-top: 2px solid #4a8cff;
            margin-top: -2px;
        }
        /* 自定义组合项容器样式 */
        .custom-group-item {
            padding: 10px;
            border-bottom: 1px solid #343a40;
            cursor: move;
            user-select: none;
        }
        /* 自定义组合项头部样式 */
        .custom-group-header {
            display: flex;
            align-items: center;
        }
        /* 自定义组合项内容样式 */
        .custom-group-content {
            flex: 1;
        }
        /* 自定义组合项名称样式 */
        .custom-group-name {
            font-size: 14px;
            font-weight: bold;
            color: #4a8cff; /* 蓝色 */
        }
        /* 自定义组合项标签样式 */
        .custom-group-label {
            font-size: 10px;
            color: #6e757f; /* 浅灰色 */
            background: #262f3b; /* 深灰色 */
            margin-left: 10px;
            padding: 2px 6px;
            border-radius: 3px;
        }

        /* 自定义组合项操作按钮样式 */
        .custom-group-actions {
            float: right;
        }
        /* 自定义组合项↑、↓、编辑等按钮样式 */
        .custom-group-btn {
            font-size: 10px;
            background: #2d3748;
            color: white;
            margin-right: 5px; /* 按钮之间的间距 */
            border: none;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
            height: 24px; /* 高度 */
            box-sizing: border-box; /* 确保padding包含在高度内 */
            line-height: 1.2; /* 设置行高以确保文本垂直居中 */
            vertical-align: top; /* 顶部对齐 */
        }
        /* 自定义组合删除按钮样式 */
        .custom-group-btn-delete {
            font-size: 10px;
            background: #a50606;
            color: white;
            margin-right: 5px; /* 按钮之间的间距 */
            border: none;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
            height: 24px; /* 高度 */
            box-sizing: border-box; /* 确保padding包含在高度内 */
            line-height: 1.2; /* 设置行高以确保文本垂直居中 */
            vertical-align: top; /* 顶部对齐 */
        }
        /* 自定义组合描述文本样式 */
        .custom-group-description {
            margin: 5px 0 0 0;
            color: #545764 !important;
            font-size: 10px; /* 小号 */
            /* font-style: italic; */ /* 斜体 */
        }
        /* 自定义组合券商文本样式 */
        .custom-group-brokers {
            margin: 5px 0 0 0;
            color: #999;
            font-size: 10px; /* 小号 */
        }
        /* 自定义组合提示文本样式 */
        .custom-group-tip {
            color: #525252  !important; /* 灰色 */
            font-size: 12px;
            margin-top: 10px;
            /* font-style: italic; */ /* 斜体 */
        }
        /* 表单字段标签样式 */
        .form-field-label {
            display: block;
            margin-bottom: 5px;
            color: #D3E1F4;
        }
        /* 表单必填字段星号样式 */
        .required-star {
            color: #ff4747;
        }
        /* 表单输入框样式 */
        .form-input {
            width: 100%;
            padding: 8px;
            background: #1C1D21;
            border: 1px solid #343a40;
            color: #D3E1F4;
            box-sizing: border-box;
        }
        /* 表单文本域样式 */
        .form-textarea {
            width: 100%;
            padding: 8px;
            background: #1C1D21;
            border: 1px solid #343a40;
            color: #D3E1F4;
            box-sizing: border-box;
        }
        /* 设置输入框placeholder颜色 */
        .form-input::placeholder {
            color: #3a4349;
        }
        /* 设置文本域placeholder颜色 */
        .form-textarea::placeholder {
            color: #3a4349;
        }
        /* 表单确认按钮样式 */
        .form-button {
            background: #2d3748;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 3px;
            cursor: pointer;
            margin-right: 10px;
        }
        /* 表单取消按钮样式 */
        .form-button-cancel {
            background: #a50606;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 3px;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="left-plante">
                <div class="date-title">龙虎榜</div>
                <ul id="dateList">
                    <!-- 日期列表由 JavaScript 动态生成 -->
                </ul>
            </div>
            <div class="right-plante">
                <div id="titleLabel" class="title"></div>
            </div>
        </div>
    </div>

    <!-- 弹窗结构 -->
    <div class="popup-overlay" id="popupOverlay">
        <div class="popup-content">
            <div class="popup-header">
                <div class="popup-title" id="popupTitle">营业部详情</div>
                <span class="popup-close" id="popupClose">&times;</span>
            </div>
            <div class="popup-iframe-container">
                <iframe class="popup-iframe" id="popupIframe"></iframe>
            </div>
        </div>
    </div>

    <script>
        // 提取文件名和目录名作为全局常量
        const url = window.location.href;
        const pathParts = url.split('/'); // 获取URL路径的数组
        const fileName = pathParts[pathParts.length - 1].split('?')[0]; // 获取文件名，去除查询参数
        const lastDirectory = pathParts[pathParts.length - 2]; // 获取最后一层目录名

        // 获取URL参数对象
        const urlParams = new URLSearchParams(window.location.search);
        var stockCode = urlParams.get("stock_code"); // 股票代码
        var stockName = urlParams.get("stock_name"); // 股票名称
        var lastStockCode = stockCode; // 记录上一次的股票代码
        // 获取除stock_code和stock_name之外的其他参数
        const remainingParamsArray = [];
        for (const [key, value] of urlParams.entries()) {
            // 跳过stock_code和stock_name参数
            if (key !== 'stock_code' && key !== 'stock_name') {
                remainingParamsArray.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
            }
        }
        const remainingParams = remainingParamsArray.join('&'); // 将剩余参数用&连接

        var currentDate = "";
        var lastActiveDate = "";

        var newStockCodeFlag = 0; // 股票代码变更标记

        // URL 预处理函数
        function preprocessUrl(url) {
            if (url.startsWith('http://www.treeid/dlghttp://')) {
                return url.replace('http://www.treeid/dlghttp://', 'http://');
            }
            
            // 处理其他可能的协议转换
            if (url.startsWith('dlghttp://')) {
                return url.replace('dlghttp://', 'http://');
            }
            
            return url;
        }

        // 显示弹窗 - 修改为内部浏览器新窗口打开
        function showPopup(url, title) {
            // 如果是通达信环境，使用内部打开方式
            if (typeof window.ct !== 'undefined') {
                window.open(url, '_self');
                return;
            }

            var processedUrl = preprocessUrl(url);
            
            document.getElementById('popupTitle').textContent = title || '营业部详情';
            document.getElementById('popupIframe').src = processedUrl;
            document.getElementById('popupOverlay').style.display = 'block';

            // 隐藏原窗口内容
            document.querySelector('.container').style.opacity = '0.3';
            document.querySelector('.container').style.pointerEvents = 'none';
        }

        // 关闭弹窗
        function closePopup() {
            document.getElementById('popupOverlay').style.display = 'none';
            document.getElementById('popupIframe').src = '';
            
            // 恢复原窗口内容
            document.querySelector('.container').style.opacity = '1';
            document.querySelector('.container').style.pointerEvents = 'auto';
            /*
            // 重新加载龙虎榜数据
            if (currentDate) {
                load_lhb(stockCode, currentDate);
            } */
        }

        // 弹窗事件绑定
        document.getElementById('popupClose').addEventListener('click', closePopup);
        document.getElementById('popupOverlay').addEventListener('click', function (e) {
            if (e.target === this) {
                closePopup();
            }
        });

        // 设置激活日期
        function setActiveDate(dateElement, date) {
            // 移除所有激活状态
            document.querySelectorAll('.date-label.active').forEach(item => {
                item.classList.remove('active');
            });
            
            // 添加新激活状态
            dateElement.classList.add('active');
            
            // 脉冲动画已移除
            
            // 触发自定义事件
            var event = new CustomEvent('dateActivated', {
                detail: {
                    date: date,
                    element: dateElement
                }
            });
            document.dispatchEvent(event);
        }
        
        // 监听激活事件
        document.addEventListener('dateActivated', function(e) {
            if (lastActiveDate !== e.detail.date) {
                lastActiveDate = e.detail.date;
            }
        });

        // 数值颜色格式化函数
        function formatColorNumber(num) {
            var result = parseFloat(num);
            if (isNaN(result)) {
                return '<span style="color: #d2d9df;">0%</span>';
            }

            var color = result >= 0 ? '#ff4747' : '#71c016';
            var formatted = NumberTransform(num);

            // 处理正负号显示
            if (result > 0) {
                formatted = '+' + formatted;
            }

            // 添加百分号
            return '<span style="margin-left: -5px;color: ' + color + ';">' + formatted + '%</span>';
        }

        // 数值颜色格式化函数（不带百分号）
        function formatColorNumberNoPercent(num) {
            var result = parseFloat(num);
            if (isNaN(result)) {
                return '<span style="color: #d2d9df;">0</span>';
            }

            var color = result >= 0 ? '#ff4747' : '#71c016';
            var formatted = NumberTransform(num);

            // 处理正负号显示
            if (result > 0) {
                formatted = '+' + formatted;
            }

            return '<span style="margin-left: 5px;color: ' + color + ';">' + formatted + '</span>';
        }

        var div = document.getElementById('titleLabel');
        
        // 龙虎榜数据加载函数
        function load_lhb(code, tt) {
            // 更新当前选中的日期
            currentDate = tt;
            
            // 原有的数据加载逻辑
            var url = "https://applhb.longhuvip.com/w1/api/index.php?apiv=w31&c=Stock&a=GetNewOneStockInfo&Type=0&StockID=" + code + "&Time=" + (tt || getToday());
            var ytdbusin = "";
            $.ajax({
                type: "get",
                url: url,
                dataType: "json",
                async: true,
                cache: false,
                timeout: 3000,
                success: function (data) {
                    if (newStockCodeFlag == 1) {
                        newStockCodeFlag = 0;
                        // 生成日期标签并添加点击事件监听
                        var dateListElement = document.getElementById('dateList');
                        dateListElement.innerHTML = '';
                        var i = 0;
                        data.OnTimeList.forEach(function (date) {
                            if (i < 20) {
                                var li = document.createElement('li');
                                li.textContent = date;
                                li.classList.add('date-label');
                                li.addEventListener('click', function () {
                                    setActiveDate(this, date);
                                    load_lhb(code, date);
                                });
                                dateListElement.appendChild(li);
                            }
                            i++;
                        });
                        tt = data.OnTimeList[0];
                        
                        // 设置默认选中第一个日期
                        setTimeout(function() {
                            var firstDate = document.querySelectorAll('.date-label')[0];
                            if (firstDate) {
                                setActiveDate(firstDate, tt);
                            }
                        }, 0);
                    }

                    // “通达信龙虎榜”切换按钮使用弹窗打开
                    var tdxUrl = "http://page1.tdx.com.cn:7615/site/kggx/tk_yzlhb_yz_yz.html?flag=yybxq&code=" + code;
                    div.innerHTML = "<div class='right-header'><span class='stock-name' style='margin-left: 5px;'>" + stockName + "</span><span style='padding-left:5px;'>" + (data.CurPrice || '--') + "</span><span style='padding-left:5px;'>" + formatColorNumber(data.QuoteChange) + "</span><span style='padding-left:5px;font-size:12px;'>成交额：" + NumberTransform(data.Turnover) + "</span><span style='padding-left:5px;font-size:12px;'>换手率：" + NumberTransform(data.TurnoverRatio) + "%</span><a href='javascript:void(0);' onclick=\"showPopup('" + tdxUrl + "', '通达信龙虎榜')\" class='tdx-switch'>通达信龙虎榜</a><a href='javascript:void(0);' onclick=\"openCustomGroupManager()\" class='tdx-switch'>自定义组合</a></div>";

                    var res = data.List;
                    // 获取昨买、昨卖数据
                    var ytdbusin = data.ytdbusin;
                    for (var j = 0; j < res.length; j++) {
                        /* 如，上榜理由：有价格涨跌幅限制的日换手率达20%的前五只证券 */
                        var sbly = res[j].UpReason;
                        for (var i = 0; i < sbly.length; i++) {
                            if (j == 0) {
                                div.innerHTML += "<div class='list1-reasons'>上榜理由：" + sbly[i] + "</div>";
                            } else {
                                div.innerHTML += "<div class='list2-reasons'>上榜理由：" + sbly[i] + "</div>";
                            }
                        }
                        /* 如，买入总计：1.44亿卖出总计：2.07亿净额：-6300万 */
                        div.innerHTML += "<div style='font-size:14px;'>" + "<span style='color:#ff4747;margin-left:5px;'>买入总计：" + NumberTransform(res[j].BuyTotal) + "</span><span style='color:#71c016;margin-left:15px;'>卖出总计：" + NumberTransform(res[j].SellTotal) + "</span><span style='color:#d2d9df;margin-left:15px;'>净额：" + formatColorNumberNoPercent(res[j].BuyTotal - res[j].SellTotal) + "</span></div>";
                        
                        // 买入营业部表格
                        var buyTable = document.createElement('table');
                        buyTable.className = 'dept-table';
                        buyTable.innerHTML = '<tr><th style="width: 45px;">关联</th><th class="dept-name" style="color:#ff4747;">买入营业部</th><th class="dept-buy">买入</th><th class="dept-sell">卖出</th><th class="dept-net">净额</th></tr>';
                        div.appendChild(buyTable);
                        
                        // 使用文档片段优化DOM操作性能
                        var buyTableFragment = document.createDocumentFragment();
                        for (var i = 0; i < res[j].BuyList.length; i++) {
                            var aa = res[j].BuyList[i];
                            var id = aa.ID;
                            var name = aa.Name;
                            var px = aa.PX;
                            var buy = aa.Buy;
                            var sell = aa.Sell;
                            var je = buy - sell;
                            var WEBDATACODE = code + "|" + (code.startsWith("6") ? 1 : 0) + "|" + tt.replace(/-/g, "") + "|B|" + px;
                            
                            var curl1 = 'http://www.treeid/dlghttp://hot.icfqs.com:7615/site/tdx_tg/fx/page_lhb_zbcj.html?flag=001&info=' + WEBDATACODE + '&color=0&bkcolor=1C1D21';

                            // 游资评级标签
                            var yzpj = "";
                            var youZiIcon = aa.YouZiIcon;
                            if (youZiIcon == 1) {
                                yzpj = "一线"; /* 一线游资 */
                            } else if (youZiIcon == 2) {
                                yzpj = "顶级"; /* 顶级游资 */
                            } else if (youZiIcon == 3) {
                                yzpj = "知名"; /* 知名游资 */
                            }
                            if (yzpj != "") {
                                yzpj = "<span class='yzpj-tag'>" + yzpj + "</span>";
                            }
                            // 游资名称标签
                            var yzmc = "";
                            var groupicon = aa.GroupIcon[0];
                            if (groupicon != undefined) {
                                // 为游资名称添加链接
                                var yzUrl = "http://page.tdx.com.cn:7615/site/kggx/tk_yzlhb_yz_yz.html?flag=yzxq&code=" + encodeURIComponent(groupicon);
                                yzmc = "<span id='yzmc-tag'><a href='javascript:void(0);' onclick=\"showPopup('" + yzUrl + "', '" + groupicon + "游资详情')\" style='font-size: 10px;color: inherit;'>" + groupicon + "</a></span>";
                            }
                            // 关联标签
                            var gl = "";
                            var associcon = aa.AssocIcon;
                            if (associcon == 1) {
                                gl = "<span class='assoc-tag'>关联</span>";
                            }
                            // 昨买、昨卖标签
                            var zb = "";
                            var zs = "";
                            var zbuy = "";
                            var zsell = "";
                            if (ytdbusin != undefined) {
                                // 显示昨买信息（紫色背景，白色字体）
                                if (ytdbusin.buy != undefined && ytdbusin.buy[id] != undefined) {
                                    var buyRank = ytdbusin.buy[id];
                                    if (buyRank <= 5) {
                                        zbuy = "<span class='zbuy-tag'>昨买" + buyRank + "</span>";
                                    }
                                }
                                
                                // 显示昨卖信息（绿色背景，白色字体）
                                if (ytdbusin.sell != undefined && ytdbusin.sell[id] != undefined) {
                                    var sellRank = ytdbusin.sell[id];
                                    if (sellRank <= 5) {
                                        zsell = "<span class='zsell-tag'>昨卖" + sellRank + "</span>";
                                    }
                                }
                            }

                            var row = document.createElement('tr');
                            // 买入营业部 - 使用修改后的showPopup函数
                            row.innerHTML = '<td style="width: 45px;">' + gl + '</td><td class="dept-name">' + 
                                '<a href="javascript:void(0);" onclick="showPopup(\'' + curl1 + '\', \'' + name + '\')">' + 
                                name + '</a>' + yzpj + yzmc + zbuy + zsell + zb + zs + displayCustomTags(name) + '</td>' +
                                '<td class="dept-buy">' + (buy == 0 ? '<font style="color: #6e757f;">--</font>' : NumberTransform(buy)) + '</td>' +
                                '<td class="dept-sell">' + (sell == 0 ? '<font style="color: #6e757f;">--</font>' : NumberTransform(sell)) + '</td>' +
                                '<td class="dept-net" style="color: ' + (je >= 0 ? '#ff4747' : '#71c016') + ';">' + 
                                (je >= 0 ? '+' : '') + NumberTransform(je) + '</td>';
                            buyTableFragment.appendChild(row);
                        }
                        buyTable.appendChild(buyTableFragment);
                        
                        // 卖出营业部表格
                        var sellTable = document.createElement('table');
                        sellTable.className = 'dept-table';
                        sellTable.innerHTML = '<tr><th style="width: 45px;">关联</th><th class="dept-name" style="color:#71c016;">卖出营业部</th><th class="dept-buy">买入</th><th class="dept-sell">卖出</th><th class="dept-net">净额</th></tr>';
                        div.appendChild(sellTable);
                        
                        // 使用文档片段优化DOM操作性能
                        var sellTableFragment = document.createDocumentFragment();
                        for (var i = 0; i < res[j].SellList.length; i++) {
                            var aa = res[j].SellList[i];
                            var id = aa.ID;
                            var name = aa.Name;
                            var px = aa.PX;
                            var buy = aa.Buy;
                            var sell = aa.Sell;
                            var je = buy - sell;
                            var WEBDATACODE = code + "|" + (code.startsWith("6") ? 1 : 0) + "|" + tt.replace(/-/g, "") + "|S|" + px;
                            
                            var curl1 = 'http://www.treeid/dlghttp://hot.icfqs.com:7615/site/tdx_tg/fx/page_lhb_zbcj.html?flag=001&info=' + WEBDATACODE + '&color=0&bkcolor=1C1D21';

                            // 游资评级标签
                            var yzpj = "";
                            var youZiIcon = aa.YouZiIcon;
                            if (youZiIcon == 1) {
                                yzpj = "一线"; /* 一线游资 */
                            } else if (youZiIcon == 2) {
                                yzpj = "顶级"; /* 顶级游资 */
                            } else if (youZiIcon == 3) {
                                yzpj = "知名"; /* 知名游资 */
                            }
                            if (yzpj != "") {
                                yzpj = "<span class='yzpj-tag'>" + yzpj + "</span>";
                            }
                            // 游资名称标签
                            var yzmc = "";
                            var groupicon = aa.GroupIcon[0];
                            if (groupicon != undefined) {
                                // 为游资名称添加链接
                                var yzUrl = "http://page.tdx.com.cn:7615/site/kggx/tk_yzlhb_yz_yz.html?flag=yzxq&code=" + encodeURIComponent(groupicon);
                                yzmc = "<span id='yzmc-tag'><a href='javascript:void(0);' onclick=\"showPopup('" + yzUrl + "', '" + groupicon + "游资详情')\" style='font-size: 10px;color: inherit;'>" + groupicon + "</a></span>";
                            }
                            // 关联标签
                            var gl = "";
                            var associcon = aa.AssocIcon;
                            if (associcon == 1) {
                                gl = "<span class='assoc-tag'>关联</span>";
                            }
                            // 昨买、昨卖标签
                            var zb = "";
                            var zs = "";
                            var zbuy = "";
                            var zsell = "";
                            if (ytdbusin != undefined) {
                                // 显示昨买信息（紫色背景，白色字体）
                                if (ytdbusin.buy != undefined && ytdbusin.buy[id] != undefined) {
                                    var buyRank = ytdbusin.buy[id];
                                    if (buyRank <= 5) {
                                        zbuy = "<span class='zbuy-tag'>昨买" + buyRank + "</span>";
                                    }
                                }
                                
                                // 显示昨卖信息（绿色背景，白色字体）
                                if (ytdbusin.sell != undefined && ytdbusin.sell[id] != undefined) {
                                    var sellRank = ytdbusin.sell[id];
                                    if (sellRank <= 5) {
                                        zsell = "<span class='zsell-tag'>昨卖" + sellRank + "</span>";
                                    }
                                }
                            }

                            var row = document.createElement('tr');
                            // 卖出营业部 - 使用修改后的showPopup函数
                            row.innerHTML = '<td style="width: 45px;">' + gl + '</td><td class="dept-name">' + 
                                '<a href="javascript:void(0);" onclick="showPopup(\'' + curl1 + '\', \'' + name + '\')">' + 
                                name + '</a>' + yzpj + yzmc + zbuy + zsell + zb + zs + displayCustomTags(name) + '</td>' +
                                '<td class="dept-buy">' + (buy == 0 ? '<font style="color: #6e757f;">--</font>' : NumberTransform(buy)) + '</td>' +
                                '<td class="dept-sell">' + (sell == 0 ? '<font style="color: #6e757f;">--</font>' : NumberTransform(sell)) + '</td>' +
                                '<td class="dept-net" style="color: ' + (je >= 0 ? '#ff4747' : '#71c016') + ';">' + 
                                (je >= 0 ? '+' : '') + NumberTransform(je) + '</td>';
                            sellTableFragment.appendChild(row);
                        }
                        sellTable.appendChild(sellTableFragment);
                    }
                }
            });
        }

        // 获取今日日期
        function getToday() {
            let today = new Date();
            let year = today.getFullYear();
            let month = String(today.getMonth() + 1).padStart(2, '0');
            let day = String(today.getDate()).padStart(2, '0');
            return year + '-' + month + '-' + day;
        }

        // 数值转换函数
        function NumberTransform(num) {
            var result = parseFloat(num);
            if (isNaN(result)) {
                return false;
            }
            if (Math.abs(result) > 100000000) {
                result = result / 100000000;
                result = result.toFixed(2) + " 亿";
            } else if (Math.abs(result) > 10000) {
                result = result / 10000;
                result = result.toFixed(0) + " 万";
            }
            return result;
        }

        // 创建div函数
        function createDiv(a) {
            var divA = document.createElement('div');
            divA.id = a;
            divA.className = "row-box";
            divA.style.position = "relative";
            divA.style.float = "left";
            divA.style.left = "0px";
            divA.style.width = " ";
            document.body.appendChild(divA);
            return divA;
        }

        ///////////////////////////////////////////////////////// "自定义组合管理"相关函数 /////////////////////////////////////////////////////////
        
        // 加载自定义组合数据
        function loadCustomGroups() {
            // 尝试从localStorage加载数据
            try {
                var data = localStorage.getItem('longhu_custom_groups');
                if (data) {
                    return JSON.parse(data);
                }
            } catch (e) {
            }
            
            // 如果localStorage中没有数据，则使用默认数据
            return [
                {
                    "name": "组合名称",
                    "label": "组合标签",
                    "description": "操作风格",
                    "associated_brokers": ["相关席位1", "相关席位2"],
                    "fontColor": "#d3cf07",
                    "backgroundColor": "#720505"
                }
            ];
        }

        // 保存自定义组合数据至本地存储
        function saveCustomGroups(groups) {
            try {
                localStorage.setItem('longhu_custom_groups', JSON.stringify(groups));
            } catch (e) {
                alert("保存失败，请检查浏览器设置");
            }
        }

        // 打开"自定义组合管理"窗口
        function openCustomGroupManager() {
            // 创建弹窗元素
            var overlay = document.createElement('div');
            overlay.className = 'popup-overlay';
            overlay.id = 'customGroupOverlay';
            overlay.style.display = 'block';

            var content = document.createElement('div');
            content.className = 'popup-content';

            var header = document.createElement('div');
            header.className = 'popup-header';

            var title = document.createElement('div');
            title.className = 'popup-title';
            title.textContent = '自定义组合管理';

            var closeBtn = document.createElement('span');
            closeBtn.className = 'popup-close';
            closeBtn.innerHTML = '&times;';
            closeBtn.onclick = function() {
                document.body.removeChild(overlay);
                // 恢复主窗口
                document.querySelector('.container').style.opacity = '1';
                document.querySelector('.container').style.pointerEvents = 'auto';
            };

            header.appendChild(title);
            header.appendChild(closeBtn);

            var container = document.createElement('div');
            container.className = 'popup-iframe-container';
            container.style.padding = '20px';
            container.style.overflowY = 'auto';

            // 创建组合列表
            var groups = loadCustomGroups();
            
            var listContainer = document.createElement('div');
            listContainer.innerHTML = '<h3>现有组合</h3>';
            
            var list = document.createElement('ul');
            list.style.listStyle = 'none';
            list.style.padding = '0';
            
            // 使用文档片段来提高性能
            var fragment = document.createDocumentFragment();
            
            // 异步处理每个组合项目以提高性能
            Promise.resolve().then(() => {
                groups.forEach(function(group, index) {
                    var item = document.createElement('li');
                    item.className = 'custom-group-item';
                    item.draggable = true;
                    item.dataset.index = index;
                    
                    // 添加拖拽事件
                    item.addEventListener('dragstart', function(e) {
                        e.dataTransfer.setData('text/plain', index);
                        this.classList.add('dragging');
                    });
                    
                    item.addEventListener('dragover', function(e) {
                        e.preventDefault();
                        this.classList.add('dragover');
                    });
                    
                    item.addEventListener('dragleave', function() {
                        this.classList.remove('dragover');
                    });
                    
                    item.addEventListener('drop', function(e) {
                        e.preventDefault();
                        this.classList.remove('dragover');
                        var fromIndex = parseInt(e.dataTransfer.getData('text/plain'));
                        var toIndex = parseInt(this.dataset.index);
                        if (fromIndex !== toIndex) {
                            moveGroup(fromIndex, toIndex);
                        }
                    });
                    
                    item.addEventListener('dragend', function() {
                        document.querySelectorAll('li').forEach(li => {
                            li.classList.remove('dragging', 'dragover');
                        });
                    });
                    
                    item.innerHTML = `
                        <div class="custom-group-header">
                            <div class="custom-group-content">
                                <strong class="custom-group-name">${group.name}</strong> 
                                ${group.label ? `<span class="custom-group-label">${group.label}</span>` : ''}
                                <span class="custom-group-actions">
                                    <button onclick="moveGroupUp(${index})" class="custom-group-btn">↑</button>
                                    <button onclick="moveGroupDown(${index})" class="custom-group-btn">↓</button>
                                    <button onclick="editCustomGroup(${index})" class="custom-group-btn">编辑</button>
                                    <button onclick="deleteCustomGroup(${index})" class="custom-group-btn-delete">删除</button>
                                </span>
                                <p class="custom-group-description">${group.description}</p>
                                <p class="custom-group-brokers">关联营业部: ${group.associated_brokers.join(', ')}</p>
                            </div>
                        </div>
                    `;
                    fragment.appendChild(item);
                });
                
                list.appendChild(fragment);
                listContainer.appendChild(list);
                
                // 创建添加按钮
                var addButton = document.createElement('button');
                addButton.textContent = '新增组合';
                addButton.style.background = '#2d3748';
                addButton.style.color = 'white';
                addButton.style.border = 'none';
                addButton.style.padding = '10px 20px';
                addButton.style.borderRadius = '3px';
                addButton.style.cursor = 'pointer';
                addButton.style.marginTop = '20px';
                addButton.onclick = function() {
                    showCustomGroupForm();
                };
                
                // 创建导入按钮
                var importButton = document.createElement('button');
                importButton.textContent = '导入组合';
                // 复用与addButton相同的样式
                importButton.style.background = '#2d3748';
                importButton.style.color = 'white';
                importButton.style.border = 'none';
                importButton.style.padding = '10px 20px';
                importButton.style.borderRadius = '3px';
                importButton.style.cursor = 'pointer';
                importButton.style.marginTop = '20px';
                importButton.style.marginLeft = '10px';
                importButton.onclick = function() {
                    importCustomGroups();
                };
                
                // 创建导出按钮
                var exportButton = document.createElement('button');
                exportButton.textContent = '导出组合';
                // 复用与addButton相同的样式
                exportButton.style.background = '#2d3748';
                exportButton.style.color = 'white';
                exportButton.style.border = 'none';
                exportButton.style.padding = '10px 20px';
                exportButton.style.borderRadius = '3px';
                exportButton.style.cursor = 'pointer';
                exportButton.style.marginTop = '20px';
                exportButton.style.marginLeft = '10px';
                exportButton.onclick = function() {
                    exportCustomGroups();
                };
                
                // 添加提示文本
                var tip = document.createElement('p');
                tip.textContent = '提示：可以通过拖拽或者 ↑ ↓ 按钮来调整组合顺序';
                tip.className = 'custom-group-tip';
                
                container.appendChild(listContainer);
                container.appendChild(addButton);
                container.appendChild(importButton);
                container.appendChild(exportButton);
                container.appendChild(tip);

                content.appendChild(header);
                content.appendChild(container);
                overlay.appendChild(content);
                document.body.appendChild(overlay);

                // 隐藏原窗口内容
                document.querySelector('.container').style.opacity = '0.3';
                document.querySelector('.container').style.pointerEvents = 'none';
                
                // 点击遮罩关闭
                overlay.addEventListener('click', function(e) {
                    if (e.target === this) {
                        document.body.removeChild(overlay);
                        // 恢复主窗口
                        document.querySelector('.container').style.opacity = '1';
                        document.querySelector('.container').style.pointerEvents = 'auto';
                    }
                });
            });
        }

                // 刷新"自定义组合管理"窗口
        function refreshCustomGroupManager() {
            // 获取现有的管理窗口
            var managerOverlay = document.getElementById('customGroupOverlay');
            if (!managerOverlay) {
                // 如果没有找到管理窗口，则重新打开
                openCustomGroupManager();
                return;
            }
            
            // 更新组合列表
            var groups = loadCustomGroups();
            var listContainer = managerOverlay.querySelector('h3').parentNode;
            
            // 清除旧的列表
            var oldList = listContainer.querySelector('ul');
            if (oldList) {
                oldList.remove();
            }
            
            // 创建新的列表
            var list = document.createElement('ul');
            list.style.listStyle = 'none';
            list.style.padding = '0';
            
            // 使用文档片段来提高性能
            var fragment = document.createDocumentFragment();
            
            groups.forEach(function(group, index) {
                var item = document.createElement('li');
                item.className = 'custom-group-item';
                item.draggable = true;
                item.dataset.index = index;
                
                // 添加拖拽事件
                item.addEventListener('dragstart', function(e) {
                    e.dataTransfer.setData('text/plain', index);
                    this.classList.add('dragging');
                });
                
                item.addEventListener('dragover', function(e) {
                    e.preventDefault();
                    this.classList.add('dragover');
                });
                
                item.addEventListener('dragleave', function() {
                    this.classList.remove('dragover');
                });
                
                item.addEventListener('drop', function(e) {
                    e.preventDefault();
                    this.classList.remove('dragover');
                    var fromIndex = parseInt(e.dataTransfer.getData('text/plain'));
                    var toIndex = parseInt(this.dataset.index);
                    if (fromIndex !== toIndex) {
                        moveGroup(fromIndex, toIndex);
                    }
                });
                
                item.addEventListener('dragend', function() {
                    document.querySelectorAll('li').forEach(li => {
                        li.classList.remove('dragging', 'dragover');
                    });
                });
                
                // 创建组合项内容
                var content = document.createElement('div');
                content.className = 'custom-group-header';
                
                var contentInner = document.createElement('div');
                contentInner.className = 'custom-group-content';
                
                var name = document.createElement('strong');
                name.className = 'custom-group-name';
                name.textContent = group.name;
                
                contentInner.appendChild(name);
                
                // 添加带颜色的标签
                if (group.label) {
                    var labelSpan = document.createElement('span');
                    labelSpan.className = 'custom-group-label';
                    labelSpan.textContent = group.label;
                    contentInner.appendChild(labelSpan);
                }
                
                var actions = document.createElement('span');
                actions.className = 'custom-group-actions';
                actions.innerHTML = `
                    <button onclick="moveGroupUp(${index})" class="custom-group-btn">↑</button>
                    <button onclick="moveGroupDown(${index})" class="custom-group-btn">↓</button>
                    <button onclick="editCustomGroup(${index})" class="custom-group-btn">编辑</button>
                    <button onclick="deleteCustomGroup(${index})" class="custom-group-btn-delete">删除</button>
                `;
                contentInner.appendChild(actions);
                
                var description = document.createElement('p');
                description.className = 'custom-group-description';
                description.textContent = group.description;
                contentInner.appendChild(description);
                
                var brokers = document.createElement('p');
                brokers.className = 'custom-group-brokers';
                brokers.textContent = '关联营业部: ' + group.associated_brokers.join(', ');
                contentInner.appendChild(brokers);
                content.appendChild(contentInner);
                item.appendChild(content);
                fragment.appendChild(item);
            });
            
            list.appendChild(fragment);
            listContainer.appendChild(list);
        }

        // 显示自定义组合表单
        function showCustomGroupForm(groupData, index) {
            // 如果存在旧的表单，先移除
            var existingOverlay = document.getElementById('customGroupFormOverlay');
            if (existingOverlay) {
                document.body.removeChild(existingOverlay);
            }
            var overlay = document.createElement('div');
            overlay.className = 'popup-overlay';
            overlay.id = 'customGroupFormOverlay';
            overlay.style.display = 'block';
            var content = document.createElement('div');
            content.className = 'popup-content';
            var header = document.createElement('div');
            header.className = 'popup-header';
            var title = document.createElement('div');
            title.className = 'popup-title';
            title.textContent = groupData ? '编辑组合' : '新增组合';
            var closeBtn = document.createElement('span');
            closeBtn.className = 'popup-close';
            closeBtn.innerHTML = '&times;';
            closeBtn.onclick = function() {
                document.body.removeChild(overlay);
                // 恢复主窗口
                document.querySelector('.container').style.opacity = '1';
                document.querySelector('.container').style.pointerEvents = 'auto';
                // 确保自定义组合管理窗口是打开的
                var managerOverlay = document.getElementById('customGroupOverlay');
                if (!managerOverlay) {
                    openCustomGroupManager();
                }
            };
            header.appendChild(title);
            header.appendChild(closeBtn);
            var container = document.createElement('div');
            container.className = 'popup-iframe-container';
            container.style.padding = '20px';

            // 创建表单
            var formHtml = `
                <form id="customGroupForm" style="color: #D3E1F4;">
                    <div style="margin-bottom: 15px;">
                        <label for="groupName" class="form-field-label">组合名称: <span class="required-star">*</span></label>
                        <input type="text" id="groupName" class="form-input" 
                               placeholder="必填" value="${groupData ? groupData.name : ''}" required>
                    </div>
                    
                    <div style="margin-bottom: 15px;">
                        <label for="groupLabel" class="form-field-label">组合标签:</label>
                        <input type="text" id="groupLabel" class="form-input" 
                               placeholder="用于龙虎榜自定义组合标签显示，可置空" value="${groupData ? groupData.label : ''}">
                    </div>
                    
                    <div style="margin-bottom: 15px;">
                        <label for="fontColor" class="form-field-label">标签字体颜色:</label>
                        <div style="display: flex; align-items: center;">
                            <div id="fontColorPreview" style="width: 30px; height: 30px; background-color: ${groupData && groupData.fontColor ? groupData.fontColor : '#d3cf07'}; border: 1px solid #343a40; margin-right: 10px;"></div>
                            <input type="text" id="fontColor" class="form-input" 
                                   placeholder="#d3cf07 或 yellow" value="${groupData && groupData.fontColor ? groupData.fontColor : '#d3cf07'}" style="flex: 1; height: 35px;" oninput="updateFontColorPreview()">
                        </div>
                        <div style="margin-top: 5px;">
                            <span style="font-size: 12px; color: #6e757f;">预设颜色:</span>
                            <div id="presetFontColors"></div>
                        </div>
                    </div>
                    
                    <div style="margin-bottom: 15px;">
                        <label for="backgroundColor" class="form-field-label">标签背景颜色:</label>
                        <div style="display: flex; align-items: center;">
                            <div id="backgroundColorPreview" style="width: 30px; height: 30px; background-color: ${groupData && groupData.backgroundColor ? groupData.backgroundColor : '#720505'}; border: 1px solid #343a40; margin-right: 10px;"></div>
                            <input type="text" id="backgroundColor" class="form-input" 
                                   placeholder="#720505 或 red" value="${groupData && groupData.backgroundColor ? groupData.backgroundColor : '#720505'}" style="flex: 1; height: 35px;" oninput="updateBackgroundColorPreview()">
                        </div>
                        <div style="margin-top: 5px;">
                            <span style="font-size: 12px; color: #6e757f;">预设颜色:</span>
                            <div id="presetBackgroundColors"></div>
                        </div>
                    </div>
                    
                    <div style="margin-bottom: 15px;">
                        <label for="groupDescription" class="form-field-label">组合说明:</label>
                        <textarea id="groupDescription" class="form-textarea" style="height: 80px;" placeholder="可置空">${groupData ? groupData.description : ''}</textarea>
                    </div>
                    
                    <div style="margin-bottom: 15px;">
                        <label for="associatedBrokers" class="form-field-label">关联营业部: <span class="required-star">*</span></label>
                        <textarea id="associatedBrokers" class="form-textarea" style="height: 100px;" placeholder="必填，多个营业部用','逗号分隔" required>${groupData ? groupData.associated_brokers.join(', ') : ''}</textarea>
                    </div>
                    
                    <div style="text-align: center;">
                        <button type="button" onclick="saveCustomGroup(${index !== undefined ? index : 'undefined'})" class="form-button">
                            保存
                        </button>
                        <button type="button" onclick="cancelCustomGroupForm()" class="form-button-cancel">
                            取消
                        </button>
                    </div>
                </form>
            `;

            container.innerHTML = formHtml;
            content.appendChild(header);
            content.appendChild(container);
            overlay.appendChild(content);
            document.body.appendChild(overlay);
            
            // 生成预设颜色按钮
            generatePresetColorButtons();
            
            // 隐藏主窗口内容
            document.querySelector('.container').style.opacity = '0.3';
            document.querySelector('.container').style.pointerEvents = 'none';
        }

        // 保存自定义组合
        function saveCustomGroup(index) {
            var name = document.getElementById('groupName').value;
            var label = document.getElementById('groupLabel').value;
            var fontColor = document.getElementById('fontColor').value;
            var backgroundColor = document.getElementById('backgroundColor').value;
            var description = document.getElementById('groupDescription').value;
            var associatedBrokers = document.getElementById('associatedBrokers').value
                .split(',')
                .map(broker => broker.trim())
                .filter(broker => broker.length > 0);
            if (!name || !associatedBrokers || associatedBrokers.length === 0) {
                alert('组合名称和关联营业部不能为空');
                return;
            }
            
            var groups = loadCustomGroups();
            
            // 检查重名（编辑时允许保留原名称）
            if (index === undefined || groups[index].name !== name) {
                var nameExists = groups.some(function(group) {
                    return group.name === name;
                });
                
                if (nameExists) {
                    alert('已存在同名的组合，请使用其他名称');
                    return;
                }
            }
            
            var groupData = {
                name: name,
                label: label,
                fontColor: fontColor,
                backgroundColor: backgroundColor,
                description: description,
                associated_brokers: associatedBrokers
            };
            if (index !== undefined) {
                // 编辑现有组合
                groups[index] = groupData;
            } else {
                // 新增组合
                groups.push(groupData);
            }
            saveCustomGroups(groups);
            // 关闭表单窗口
            var formOverlay = document.getElementById('customGroupFormOverlay');
            if (formOverlay) {
                document.body.removeChild(formOverlay);
            }
            // 恢复主窗口的透明度和指针事件
            document.querySelector('.container').style.opacity = '1';
            document.querySelector('.container').style.pointerEvents = 'auto';
            // 刷新管理窗口中的列表，而不是重新打开整个窗口
            refreshCustomGroupManager();
        }

        // 取消自定义组合表单
        function cancelCustomGroupForm() {
            var formOverlay = document.getElementById('customGroupFormOverlay');
            if (formOverlay) {
                document.body.removeChild(formOverlay);
            }
            // 恢复主窗口的透明度和指针事件
            document.querySelector('.container').style.opacity = '1';
            document.querySelector('.container').style.pointerEvents = 'auto';
            
            // 确保自定义组合管理窗口是打开的
            var managerOverlay = document.getElementById('customGroupOverlay');
            if (!managerOverlay) {
                openCustomGroupManager();
            }
        }

        // 编辑自定义组合
        function editCustomGroup(index) {
            var groups = loadCustomGroups();
            if (index >= 0 && index < groups.length) {
                // 关闭管理窗口
                var managerOverlay = document.getElementById('customGroupOverlay');
                if (managerOverlay) {
                    document.body.removeChild(managerOverlay);
                }
                // 显示编辑表单
                showCustomGroupForm(groups[index], index);
            }
        }

        // 删除自定义组合
        function deleteCustomGroup(index) {
            if (confirm('确定要删除这个组合吗？')) {
                var groups = loadCustomGroups();
                if (index >= 0 && index < groups.length) {
                    groups.splice(index, 1);
                    saveCustomGroups(groups);
                    // 重新打开管理窗口以刷新列表
                    var managerOverlay = document.getElementById('customGroupOverlay');
                    if (managerOverlay) {
                        document.body.removeChild(managerOverlay);
                    }
                    openCustomGroupManager();
                }
            }
        }

        // 上移组合
        function moveGroupUp(index) {
            if (index > 0) {
                moveGroup(index, index - 1);
            }
        }

        // 下移组合
        function moveGroupDown(index) {
            var groups = loadCustomGroups();
            if (index < groups.length - 1) {
                moveGroup(index, index + 1);
            }
        }

        // 移动组合位置
        function moveGroup(fromIndex, toIndex) {
            var groups = loadCustomGroups();
            if (fromIndex >= 0 && fromIndex < groups.length && toIndex >= 0 && toIndex < groups.length) {
                // 移动元素
                var element = groups[fromIndex];
                groups.splice(fromIndex, 1);
                groups.splice(toIndex, 0, element);
                saveCustomGroups(groups);
                // 重新打开管理窗口以刷新列表
                var managerOverlay = document.getElementById('customGroupOverlay');
                if (managerOverlay) {
                    document.body.removeChild(managerOverlay);
                }
                openCustomGroupManager();
            }
        }

        // 在营业部名称旁显示自定义标签
        function displayCustomTags(deptName) {
            var groups = loadCustomGroups();
            var tags = [];
            groups.forEach(function(group) {
                // 只有当label不为空时才显示标签
                if (group.associated_brokers.includes(deptName) && group.label) {
                    // 应用自定义颜色
                    var fontColor = group.fontColor || '#d3cf07';
                    var backgroundColor = group.backgroundColor || '#720505';
                    tags.push(`<span class="custom-tag" style="color: ${fontColor}; background-color: ${backgroundColor};">${group.label}</span>`);
                }
            });
            
            return tags.join('');
        }

        // 实时更新字体颜色预览
        function updateFontColorPreview() {
            var fontColorInput = document.getElementById('fontColor');
            var fontColorPreview = document.getElementById('fontColorPreview');
            if (fontColorInput && fontColorPreview) {
                fontColorPreview.style.backgroundColor = fontColorInput.value;
            }
        }

        // 实时更新背景颜色预览
        function updateBackgroundColorPreview() {
            var backgroundColorInput = document.getElementById('backgroundColor');
            var backgroundColorPreview = document.getElementById('backgroundColorPreview');
            if (backgroundColorInput && backgroundColorPreview) {
                backgroundColorPreview.style.backgroundColor = backgroundColorInput.value;
            }
        }

        // 用于计算颜色的RGB值总和 (添加localStorage缓存)
        const COLOR_CACHE_KEY = 'longhu_color_value_cache';
        const COLOR_CACHE_EXPIRY = 7 * 24 * 60 * 60 * 1000; // 7天
        
        function getColorValue(color) {
            // 尝试从localStorage获取缓存
            try {
                const cachedData = localStorage.getItem(COLOR_CACHE_KEY);
                if (cachedData) {
                    const parsed = JSON.parse(cachedData);
                    // 检查是否过期
                    if (Date.now() - parsed.timestamp < COLOR_CACHE_EXPIRY) {
                        if (parsed.data[color] !== undefined) {
                            return parsed.data[color];
                        }
                    } else {
                        // 过期则清除
                        localStorage.removeItem(COLOR_CACHE_KEY);
                    }
                }
            } catch (e) {
                // 解析失败则忽略缓存
                localStorage.removeItem(COLOR_CACHE_KEY);
            }
            
            // 移除#符号并转换为RGB值
            if (color.startsWith('#')) {
                color = color.slice(1);
            }
            
            // 处理3位十六进制颜色值 (#RGB)
            if (color.length === 3) {
                color = color.charAt(0) + color.charAt(0) + 
                       color.charAt(1) + color.charAt(1) + 
                       color.charAt(2) + color.charAt(2);
            }
            
            // 将十六进制转换为十进制RGB值
            const r = parseInt(color.substring(0, 2), 16);
            const g = parseInt(color.substring(2, 4), 16);
            const b = parseInt(color.substring(4, 6), 16);
            
            // 计算RGB值总和
            const value = r + g + b;
            
            // 保存到localStorage缓存
            try {
                let cacheData = {};
                const existingCache = localStorage.getItem(COLOR_CACHE_KEY);
                if (existingCache) {
                    const parsed = JSON.parse(existingCache);
                    if (Date.now() - parsed.timestamp < COLOR_CACHE_EXPIRY) {
                        cacheData = parsed.data;
                    }
                }
                cacheData[color] = value;
                localStorage.setItem(COLOR_CACHE_KEY, JSON.stringify({
                    timestamp: Date.now(),
                    data: cacheData
                }));
            } catch (e) {
                // localStorage写入失败则忽略
            }
            
            return value;
        }

        // 预定义已排序的颜色数组（支持localStorage缓存）
        const SORTED_COLORS_CACHE_KEY = 'longhu_sorted_colors_cache';
        const SORTED_COLORS_CACHE_EXPIRY = 7 * 24 * 60 * 60 * 1000; // 7天
        
        // 生成预设颜色按钮 (优化版 - 支持localStorage缓存)
        function generatePresetColorButtons() {
            // 只有在容器存在时才生成按钮
            const fontContainer = document.getElementById('presetFontColors');
            const backgroundContainer = document.getElementById('presetBackgroundColors');
            
            // 如果容器都不存在，则不执行任何操作
            if (!fontContainer && !backgroundContainer) {
                return;
            }

            // 字体颜色预设
            const fontColors = [
                '#d3cf07', '#ffffff', '#000000', '#ff0000', '#00ff00',
                '#0000ff', '#ffff00', '#ff00ff', '#ffa500', '#800080',
                '#ffc0cb', '#a52a2a', '#4169e1', '#32cd32', '#ff4500',
                '#9370db', '#00ced1', '#ff6347', '#7cfc00', '#dda0dd',
                '#20b2aa', '#da70d6', '#87ceeb', '#ffd700', '#f0e68c'
            ];

            // 背景颜色预设
            const backgroundColors = [
                '#720505', '#000000', '#ff0000', '#00ff00', '#0000ff',
                '#ffff00', '#00ffff', '#ff00ff', '#ffa500', '#800080',
                '#ffc0cb', '#a52a2a', '#4169e1', '#32cd32', '#ff4500',
                '#9370db', '#00ced1', '#ff6347', '#7cfc00', '#dda0dd',
                '#20b2aa', '#da70d6', '#87ceeb', '#ffd700', '#f0e68c'
            ];

            // 尝试从localStorage获取已排序的颜色数组
            let sortedFontColors = null;
            let sortedBackgroundColors = null;
            
            try {
                const cachedSortedColors = localStorage.getItem(SORTED_COLORS_CACHE_KEY);
                if (cachedSortedColors) {
                    const parsed = JSON.parse(cachedSortedColors);
                    // 检查是否过期
                    if (Date.now() - parsed.timestamp < SORTED_COLORS_CACHE_EXPIRY) {
                        sortedFontColors = parsed.fontColors;
                        sortedBackgroundColors = parsed.backgroundColors;
                    } else {
                        // 过期则清除
                        localStorage.removeItem(SORTED_COLORS_CACHE_KEY);
                    }
                }
            } catch (e) {
                // 解析失败则忽略缓存
                localStorage.removeItem(SORTED_COLORS_CACHE_KEY);
            }

            if (fontContainer) {
                fontContainer.innerHTML = ''; // 清空现有内容
                
                // 如果没有缓存，则进行排序并缓存
                if (sortedFontColors === null) {
                    // 对除第一个以外的颜色按RGB值从大到小排序
                    const firstFontColor = fontColors[0];
                    const restFontColors = fontColors.slice(1);
                    restFontColors.sort((a, b) => getColorValue(b) - getColorValue(a));
                    sortedFontColors = [firstFontColor, ...restFontColors];
                    
                    // 保存排序结果到localStorage
                    try {
                        localStorage.setItem(SORTED_COLORS_CACHE_KEY, JSON.stringify({
                            timestamp: Date.now(),
                            fontColors: sortedFontColors,
                            backgroundColors: sortedBackgroundColors || [] // 如果backgroundColors还没计算，则先存空数组
                        }));
                    } catch (e) {
                        // localStorage写入失败则忽略
                    }
                }
                
                // 使用已排序或已缓存的结果
                sortedFontColors.forEach(color => {
                    const button = document.createElement('button');
                    button.type = 'button';
                    button.tabIndex = -1; // 设置tabIndex为-1，使按钮不参与Tab键导航
                    button.style.cssText = `background: ${color}; width: 20px; height: 20px; border: 1px solid #343a40; margin: 2px; padding: 0;`;
                    button.onclick = function() {
                        document.getElementById('fontColor').value = color;
                        updateFontColorPreview();
                    };
                    fontContainer.appendChild(button);
                });
            }

            if (backgroundContainer) {
                backgroundContainer.innerHTML = ''; // 清空现有内容
                
                // 如果没有缓存，则进行排序并缓存
                if (sortedBackgroundColors === null) {
                    // 对除第一个以外的颜色按RGB值从小到大排序
                    const firstBackgroundColor = backgroundColors[0];
                    const restBackgroundColors = backgroundColors.slice(1);
                    restBackgroundColors.sort((a, b) => getColorValue(a) - getColorValue(b));
                    sortedBackgroundColors = [firstBackgroundColor, ...restBackgroundColors];
                    
                    // 保存排序结果到localStorage
                    try {
                        const existingCache = localStorage.getItem(SORTED_COLORS_CACHE_KEY);
                        let cacheObj = {
                            timestamp: Date.now(),
                            backgroundColors: sortedBackgroundColors,
                            fontColors: sortedFontColors || [] // 如果fontColors还没计算，则先存空数组
                        };
                        
                        if (existingCache) {
                            const parsed = JSON.parse(existingCache);
                            if (Date.now() - parsed.timestamp < SORTED_COLORS_CACHE_EXPIRY) {
                                // 合并已有的缓存数据
                                cacheObj.fontColors = sortedFontColors || parsed.fontColors || [];
                            }
                        }
                        
                        localStorage.setItem(SORTED_COLORS_CACHE_KEY, JSON.stringify(cacheObj));
                    } catch (e) {
                        // localStorage写入失败则忽略
                    }
                }
                
                // 使用已排序或已缓存的结果
                sortedBackgroundColors.forEach(color => {
                    const button = document.createElement('button');
                    button.type = 'button';
                    button.tabIndex = -1; // 设置tabIndex为-1，使按钮不参与Tab键导航
                    button.style.cssText = `background: ${color}; width: 20px; height: 20px; border: 1px solid #343a40; margin: 2px; padding: 0;`;
                    button.onclick = function() {
                        document.getElementById('backgroundColor').value = color;
                        updateBackgroundColorPreview();
                    };
                    backgroundContainer.appendChild(button);
                });
            }
        }

        // 导入自定义组合
        function importCustomGroups() {
            // 检查是否已经有文件选择器存在
            var existingInput = document.getElementById('importFileInput');
            if (existingInput) {
                existingInput.remove();
            }
            // 创建文件输入元素
            var input = document.createElement('input');
            input.type = 'file';
            input.accept = '.json';
            input.id = 'importFileInput';
            // 隐藏元素
            input.style.display = 'none';

            // 标记文件选择器是否已被触发
            var clicked = false;
            input.onchange = function(event) {
                var file = event.target.files[0];
                if (!file) {
                    // 清理隐藏的input元素
                    input.remove();
                    return;
                }
                
                var reader = new FileReader();
                reader.onload = function(e) {
                    try {
                        var importedData = JSON.parse(e.target.result);
                        if (Array.isArray(importedData)) {
                            // 获取当前已存在的组合
                            var currentGroups = loadCustomGroups();
                            
                            // 过滤掉已经存在的组合（根据名称判断）
                            var newGroups = importedData.filter(function(importedGroup) {
                                return !currentGroups.some(function(currentGroup) {
                                    return currentGroup.name === importedGroup.name;
                                });
                            });
                            // 合并数据
                            var mergedGroups = currentGroups.concat(newGroups);
                            saveCustomGroups(mergedGroups);
                            
                            // 刷新界面而不是重新打开整个窗口
                            refreshCustomGroupManager();
                            
                            if (newGroups.length > 0) {
                                alert('成功导入 ' + newGroups.length + ' 个新组合！');
                            } else {
                                alert('没有新的组合需要导入');
                            }
                        } else {
                            alert('文件格式不正确');
                        }
                    } catch (error) {
                        alert('导入失败：文件格式错误');
                    } finally {
                        // 清理隐藏的input元素
                        input.remove();
                    }
                };
                reader.readAsText(file);
            };
            // 添加错误处理
            input.onerror = function() {
                alert('文件选择失败');
                // 清理隐藏的input元素
                input.remove();
            };
            // 添加到文档中
            document.body.appendChild(input);
            // 直接触发点击，确保每次都能打开文件选择窗口
            input.click();
        }

        // 导出自定义组合
        function exportCustomGroups() {
            var groups = loadCustomGroups();
            var dataStr = JSON.stringify(groups, null, 2);
            var dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr);
            
            var exportFileDefaultName = '龙虎榜自定义组合.json';
            
            var linkElement = document.createElement('a');
            linkElement.setAttribute('href', dataUri);
            linkElement.setAttribute('download', exportFileDefaultName);
            linkElement.click();
        }

        // 页面替换（URL触发通过弹窗联动是关键），不会产生https访问，只替换URL
        function replaceDoc() {
            // 构建新的URL，保持目录结构不变
            var newUrl = 'http://www.treeid/dlglocalurl##homepath##' + lastDirectory + '/' + fileName + '?stock_code=xxxxxx&stock_name=##STOCKNAME##';
            if (remainingParams) {
                newUrl += '&' + remainingParams;
            }

            window.location.replace(newUrl); // 替换页面

            // 获取当前页面URL
            const params = new URLSearchParams(window.location.search);
            // 获取股票代码参数（直接是股票代码，不带##符号）
            stockCode = params.get('stock_code');
            // 获取股票名称参数（直接是股票名称，不带##符号）
            stockName = params.get('stock_name');

            newStockCodeFlag = (stockCode === lastStockCode) ? 0 : 1; // 判断是否为新股票
            
            // 检测到新股票时标记数据变化
            if (newStockCodeFlag == 1) {
                lastStockCode = stockCode;
            }
        }

        // 检测通达信状态（最小化状态检测）
        function isMinStatus() {
            var isMin = false;
            if (window.outerWidth !== undefined) {
                isMin = window.outerWidth <= 160 && window.outerHeight <= 27;
            } else {
                isMin = window.screenTop < -30000 && window.screenLeft < -30000;
            }
            return isMin;
        }


        // 浏览器事件处理程序，页面加载完成后初始化，当整个页面（包括所有依赖资源）完全加载完成后会触发。
        window.onload = function () {
            // 解析股票信息
            var url = "https://applhb.longhuvip.com/w1/api/index.php?apiv=w31&c=Stock&a=GetNewOneStockInfo&Type=0&StockID=" + stockCode;
            $.ajax({
                type: "get",
                url: url,
                dataType: "json",
                async: true,
                cache: false,
                timeout: 3000,
                success: function (data) {
                    // 生成日期标签并添加点击事件监听
                    var dateListElement = document.getElementById('dateList');
                    dateListElement.innerHTML = ''; // 清空日期列表
                    var i = 0;
                    data.OnTimeList.forEach(function (date) {
                        if (i < 20) {
                            var li = document.createElement('li');
                            li.textContent = date;
                            li.classList.add('date-label');
                            
                            // 添加点击事件
                            li.addEventListener('click', function () {
                                setActiveDate(this, date);
                                load_lhb(stockCode, date);
                            });
                            
                            dateListElement.appendChild(li);
                        }
                        i++;
                    });
                    
                    // 默认选中第一个日期
                    if (data.OnTimeList.length > 0) {
                        currentDate = data.OnTimeList[0];
                        // 使用setTimeout确保DOM更新完成后再执行
                        setTimeout(function() {
                            var firstDate = document.querySelectorAll('.date-label')[0];
                            if (firstDate) {
                                setActiveDate(firstDate, currentDate);
                                load_lhb(stockCode, currentDate);
                            }
                        }, 0);
                    }
                }
            });
        };

        setInterval(function () {
            // 关键：只在弹窗模式下股票变化时刷新页面
            if (!isMinStatus()) {
                replaceDoc();
            }
        }, 500);
    </script>
    <script type="text/javascript" src="js/jquery.min.js"></script>
</body>
</html>
